From ad55a2d28ac192a05a0538257067b995f8869f54 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Sun, 26 Feb 2006 10:53:18 +0100 Subject: [PATCH] Instead of using a static filename in the guest bootloader, use a random filename so that multiple guests can start up simultaneously. Signed-off-by: Jeremy Katz --- tools/python/xen/xend/XendBootloader.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/python/xen/xend/XendBootloader.py b/tools/python/xen/xend/XendBootloader.py index d64d4eee9a..82d09b8bb9 100644 --- a/tools/python/xen/xend/XendBootloader.py +++ b/tools/python/xen/xend/XendBootloader.py @@ -1,7 +1,7 @@ # # XendBootloader.py - Framework to run a boot loader for picking the kernel # -# Copyright 2005 Red Hat, Inc. +# Copyright 2005-2006 Red Hat, Inc. # Jeremy Katz # # This software may be freely redistributed under the terms of the GNU @@ -13,13 +13,12 @@ # import os, select, errno +import random import sxp from XendLogging import log from XendError import VmError -BL_FIFO = "/var/lib/xen/xenbl" - def bootloader(blexec, disk, quiet = 0, vcpus = None, entry = None): """Run the boot loader executable on the given disk and return a config image. @@ -38,14 +37,18 @@ def bootloader(blexec, disk, quiet = 0, vcpus = None, entry = None): log.error(msg) raise VmError(msg) - os.mkfifo(BL_FIFO, 0600) + while True: + fifo = "/var/lib/xen/xenbl.%s" %(random.randint(0, 32000),) + if not os.path.exists(fifo): + break + os.mkfifo(fifo, 0600) child = os.fork() if (not child): args = [ blexec ] if quiet: args.append("-q") - args.append("--output=%s" %(BL_FIFO,)) + args.append("--output=%s" %(fifo,)) if entry is not None: args.append("--entry=%s" %(entry,)) args.append(disk) @@ -59,7 +62,7 @@ def bootloader(blexec, disk, quiet = 0, vcpus = None, entry = None): while 1: try: - r = os.open(BL_FIFO, os.O_RDONLY) + r = os.open(fifo, os.O_RDONLY) except OSError, e: if e.errno == errno.EINTR: continue @@ -74,7 +77,7 @@ def bootloader(blexec, disk, quiet = 0, vcpus = None, entry = None): os.waitpid(child, 0) os.close(r) - os.unlink(BL_FIFO) + os.unlink(fifo) if len(ret) == 0: msg = "Boot loader didn't return any data!" -- 2.30.2